這次想要介紹的部分是 Audio message,它跟 Image message 一樣可以透過line_bot_api.get_message_content
去取得它的對應資訊。而 Line 的音檔寄收會是個aac檔,若要對該音檔去做其他處理的時候就需要注意。
存音檔的寫法跟圖片一樣,只是將副檔名的部分做更換
@handler.add(MessageEvent)
def handle_message(event):
if event.message.type == 'audio':
UserSendAudio = line_bot_api.get_message_content(event.message.id)
path= './audio/mp4/'+ UserId + '.aac'
with open(path, 'wb') as fd:
for chunk in UserSendAudio.iter_content():
fd.write(chunk)
那現在我們把音檔存好之後,可以對它進行怎樣的操作呢?這邊是嘗試將音檔轉換成文字再回傳給使用者。
pip install
pydub
SpeechRecognition
pydub 是 Python 中用來處理音訊檔案的套件,我們這次會使用到的是 AudioSegment,式其中可以用來變更檔案格式、音量大小、擷取音檔等功能。而SpeechRecognition則是可以進行將音檔轉文字的功能。
SpeechRecognition 有個特點是它轉文字時所使用的音檔需要是 wav 格式,因此會需要使用到 AudioSegment 來進行轉檔,而它辨認語音的語言依據是依照開頭的語言,例如說,該段音檔是前面中文,後面日文,它會當作是一段全中文的音檔去做辨識,並不會把它切成兩部分分別辨識。
下面為實際的範例:
from pydub import AudioSegment
import speech_recognition as sr
def trans_wav_to_text(filepath):
r = sr.Recognizer()#預設辨識英文
with sr.WavFile(filepath) as source:#讀取wav檔
audio = r.record(source)
try:
print("Transcription: " + r.recognize_google(audio,language="zh-TW")) #使用Google的服務
return r.recognize_google(audio,language="zh-TW") #默認辨識的語言
except LookupError:
return "Could not understand audio"
@handler.add(MessageEvent)
def handle_message(event):
if event.message.type == 'audio':
# 解讀並儲存音檔
UserSendAudio = line_bot_api.get_message_content(event.message.id)
path= './audio/'+ UserId + '.aac'
with open(path, 'wb') as fd:
for chunk in UserSendAudio.iter_content():
fd.write(chunk)
trans_aac_to_wav(path, UserId)
audio_message = trans_wav_to_text('./audio/wav/'+ UserId + '.wav')
line_bot_api.reply_message(event.reply_token,TextSendMessage(text=audio_message))
。